#ifndef CLIONPROJECT_RECORDCHAIN_H
#define CLIONPROJECT_RECORDCHAIN_H

#include <stdbool.h>
#include "../UsedStd.h"

struct RecordNode{
    bool isSoldOut;  // 区分进货，出货记录

    // commodityName是商品名称
    char commodityName[STR_MAX_LEN];
    char clientName[STR_MAX_LEN];

    int unitCount;
    int year, month, day;
    int historyLv;

    double purchasePrice, soldPrice; //进价，售价

    struct RecordNode * nextRecord, * preRecord;
    // struct RecordNode * toClientNode;
};

/*
 * 展示所有销售记录细节的函数
 * opt代表展示顺序，opt == 1是正序， == -1是倒叙
 * 函数内部没有非法输入检测，使用前必须在外部检测opt的正确性
 */
void displayAllRecords(struct RecordNode * head, int opt);

// 展示这个指针所指向的节点的信息
void displayThisRecord(struct RecordNode * displayPt);



/*
 * buildRecordChain是初期在文件中读入历史销售记录的函数，用以建立最初的销售记录链表
 * 我们的链表是双向的，并有头尾指针，为方便操作，将传入的参数设为指向指针的指针，用以直接修改参数
 * 不需要返回值，指针在函数结束后被赋值，如果文件中没有任何一条记录，则都应指向NULL
 */
void buildRecordChain(struct RecordNode ** head, struct RecordNode ** tail);



/*
 * 删除指针p指向的节点
 * 头尾指针都以地址的形式作为参数传入，并加以维护
 */
void delRecord(struct RecordNode ** head, struct RecordNode ** tail, struct RecordNode * p);

// 增加一条记录
void addRecord(struct RecordNode ** head, struct RecordNode ** tail);


/*
 *  每次修改节点信息时（增删改操作）
 *  都需要重新覆写一遍文件
 */
void rebuildRecordFile(struct RecordNode * head);



#endif //CLIONPROJECT_RECORDCHAIN_H
